home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / tcl / xf2.3-p / xf2 / xf2.3 / src / xfcut.tcl < prev    next >
Encoding:
Text File  |  1993-11-20  |  4.7 KB  |  173 lines

  1. # Program: xf
  2. # Description: paste functions
  3. #
  4. # $Header: xfcut.tcl[2.3] Wed Mar 10 12:05:36 1993 garfield@garfield frozen $
  5.  
  6. ##########
  7. # Procedure: XFPasteFile
  8. # Description: paste file to current path
  9. # Arguments: xfW - the widget to paste to
  10. #            xfFileName - the filename to paste from
  11. #            {xfSaveAsProc} - paste with variable as pathname
  12. # Returns: none
  13. # Sideeffects: none
  14. ##########
  15. proc XFPasteFile {xfW xfFileName {xfSaveAsProc 0}} {
  16.   global xfPath xfStatus
  17.  
  18.   # get the cut widget name
  19.   if {![catch "open $xfFileName r" xfInFile]} {
  20.     set xfFileContents [read $xfInFile]
  21.     close $xfInFile
  22.     
  23.     if {![regexp "^#\[ \t\]+(\[^ \t\n\]+)\[ \t\]*\n" $xfFileContents xfDummy xfCutName]} {
  24.       XFProcError "Pastebuffer not in correct format"
  25.       return
  26.     }
  27.     
  28.     if {$xfCutName == "XFNoParsing"} {
  29.       if {[catch "source $xfFileName" xfResult]} {
  30.     XFProcError $xfResult
  31.       }
  32.       return
  33.     }
  34.     
  35.     # if xfCutName is .ist.eine.kleine ... then xfPasteElement is kleine
  36.     
  37.     set xfPasteElement [string range $xfCutName [expr [string last . $xfCutName]+1] end]
  38.     set xfNewPasteElement $xfPasteElement
  39.     
  40.     # maybe could use this somehow:
  41.     # regexp {^(.*[^0-9])?([0-9]*)$} $x d class number
  42.  
  43.     set xfPasteName paste
  44.     set xfPasteNumber 0
  45.     regexp {[A-Za-z0-9_-]+} $xfPasteElement xfPasteName
  46.     regexp {[A-Za-z_-]+} $xfPasteElement xfPasteClass
  47.     regexp {[0-9]+} $xfPasteElement xfPasteNumber
  48.     
  49.     set xfNewPasteElement [XFMiscGetUniqueName $xfPasteName $xfPasteClass $xfW]
  50.  
  51.     # hopefuly this sequence does not appear in the file
  52.     set xfRoot {}
  53.  
  54.     if {$xfW == "."} {
  55.       set xfPatt $xfRoot\\.?
  56.       set xfRebind .$xfNewPasteElement
  57.       set xfNewPath .
  58.     } {
  59.       set xfPatt $xfRoot
  60.       set xfRebind $xfW.$xfNewPasteElement
  61.       if {$xfSaveAsProc} {
  62.         set xfNewPath \$insertWidgetPath
  63.       } {
  64.         set xfNewPath $xfW
  65.       }
  66.     }
  67.  
  68.     if {$xfPasteNumber > $xfStatus(elementCounter)} {
  69.       incr xfStatus(elementCounter)
  70.     }
  71.  
  72.     set xfOldPath [string range $xfCutName 0 [expr [string last . $xfCutName]-1]]
  73.     set xfPEQ [XFMiscExpandRegexp $xfPasteElement]
  74.     if {$xfOldPath == ""} {
  75.       regsub -all (\[\[\{\ \t\n\;\])\\.($xfPEQ) $xfFileContents \\1$xfRoot.\\2 xfFileContents
  76.       # this next one really ought to be fussier
  77.       regsub -all (\[\[\{\ \t\n\;\])\\. $xfFileContents \\1$xfRoot xfFileContents
  78.     } {
  79.       set xfOPQ [XFMiscExpandRegexp $xfOldPath]
  80.       regsub -all (\[\[\{\ \t\n\;\])$xfOPQ $xfFileContents \\1$xfRoot xfFileContents
  81.     }
  82.  
  83.     # now $xfRoot marks all places the initial path occurred
  84.     
  85.     regsub -all $xfRoot\\.$xfPEQ $xfFileContents $xfRoot.$xfNewPasteElement xfFileContents
  86.  
  87.     # now the new name is set
  88.  
  89.     regsub -all $xfPatt $xfFileContents $xfNewPath xfFileContents
  90.  
  91.     # now the new path is inserted - everything is ready!
  92.  
  93.     if {[catch $xfFileContents xfResult]} {
  94.       XFProcError $xfResult
  95.     }
  96.     XFMiscBindWidgetTree $xfRebind
  97.     XFEditSetPath $xfStatus(path)
  98.   }
  99. }
  100.  
  101. ##########
  102. # Procedure: XFPasteUpdate
  103. # Description: update the displayed pastebuffer
  104. # Arguments: none
  105. # Returns: none
  106. # Sideeffects: none
  107. ##########
  108. proc XFPasteUpdate {} {
  109.   global xfPath
  110.   global xfStatus
  111.  
  112.   if {![file exists $xfPath(tmp)/cb$xfStatus(uniqueId)]} {
  113.     if {$xfStatus(pasteScriptDisplayed)} {
  114.       set xfStatus(pasteScriptDisplayed) 0
  115.       destroy .xfCutbuffer
  116.     }
  117.     if {$xfStatus(pasteTreeDisplayed)} {
  118.       set xfStatus(pasteTreeDisplayed) 0
  119.       destroy .xfCutPaste
  120.     }
  121.   } {
  122.     if {$xfStatus(pasteScriptDisplayed)} {
  123.       XFMiscSetText .xfCutbuffer.frame0.text1 \
  124.         [exec cat $xfPath(tmp)/cb$xfStatus(uniqueId)]
  125.     }
  126.     if {$xfStatus(pasteTreeDisplayed)} {
  127.       foreach xfCounter [winfo children .xfCutPaste.frame1] {
  128.         destroy $xfCounter
  129.       }
  130.       XFPasteFile .xfCutPaste.frame1 $xfPath(tmp)/cb$xfStatus(uniqueId)
  131.     }
  132.   }
  133. }
  134.  
  135. ##########
  136. # Procedure: XFPasteShowTree
  137. # Description: show the current cutbuffer as tree
  138. # Arguments: none
  139. # Returns: none
  140. # Sideeffects: none
  141. ##########
  142. proc XFPasteShowTree {} {
  143.   global xfPath
  144.   global xfStatus
  145.  
  146.   # build widget structure
  147.   XFTmpltToplevel .xfCutPaste 200x200 {XF current cut buffer}
  148.   
  149.   XFTmpltFrame .xfCutPaste.frame1
  150.  
  151.   XFTmpltFrame .xfCutPaste.frame2 0
  152.  
  153.   button .xfCutPaste.frame2.ok \
  154.     -text {OK} \
  155.     -command {
  156.       global xfStatus
  157.       set xfStatus(pasteTreeDisplayed) 0
  158.       destroy .xfCutPaste}
  159.  
  160.   # paste tree
  161.   XFPasteFile .xfCutPaste.frame1 $xfPath(tmp)/cb$xfStatus(uniqueId)
  162.  
  163.   # packing
  164.   pack append .xfCutPaste.frame2 \
  165.               .xfCutPaste.frame2.ok {left fill expand}
  166.   pack append .xfCutPaste \
  167.               .xfCutPaste.frame2 {bottom fill} \
  168.               .xfCutPaste.frame1 {top fill expand}
  169. }
  170.  
  171. # eof
  172.  
  173.